package com.csizg.facemodel.util;

import android.content.Context;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import java.io.File;

/**
 * 文件管理类
 *
 * @author haohao(ronghao3508@gmail.com) on 2018/5/21 17:01
 * @version v1.0
 */
public class FaceFileUtil {

    private static String name = "text";
    private static String train = "train";

    /**
     * 获取人脸特征路径
     *
     * @param fileName 人脸特征的图片的名字
     * @return 路径
     */
    public static @NonNull
    String getFilePath(Context context, String fileName) {
        if (TextUtils.isEmpty(fileName)) {
            return "";
        }
        String str = getSDPath(context) + File.separator + name + File.separator;
        File file = new File(str);
        if (!file.exists()) {
            file.mkdirs();
        }
        // 内存路径
        return str + fileName + ".jpg";
    }

    /**
     * 图片文件父类
     */
    public static String getFileParentPath(Context context) {
        String str = getSDPath(context) + File.separator + name + File.separator;
        File file = new File(str);
        if (!file.exists()) {
            file.mkdirs();
        }
        return str;
    }

    /**
     * 训练文件
     */
    public static String getFileTrainPath(Context context, String fileName) {
        if (TextUtils.isEmpty(fileName)) {
            return null;
        }
        String str = getSDPath(context)
                + File.separator
                + name
                + File.separator
                + train
                + File.separator;
        File file = new File(str);
        if (!file.exists()) {
            file.mkdirs();
        }
        return str + fileName + ".jpg";
    }

    /**
     * 训练文件父类
     */
    public static String getFileTrainParentPath(Context context) {
        String str = getSDPath(context)
                + File.separator
                + name
                + File.separator
                + train
                + File.separator;
        File file = new File(str);
        if (!file.exists()) {
            file.mkdirs();
        }
        return str;
    }

    /**
     * 获取SD储存位置
     */
    public static String getSDPath(Context context) {
        String sdcardPath = null;
        File cache = context.getExternalCacheDir();//应用扩展存储（SD卡）
        if (cache != null && cache.exists()) {
            return cache.getAbsolutePath();
        }

        boolean sdCardExist = Environment.getExternalStorageState()
                .equals(Environment.MEDIA_MOUNTED);  //判断sd卡是否存在
        if (sdCardExist) {
            sdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath();  //获取根目录
        }
        if (sdcardPath != null) {
            return sdcardPath;
        } else {
            return Environment.getExternalStorageState();
        }
    }

    public static boolean hasTrain(Context context) {
        String path = FaceFileUtil.getFileTrainParentPath(context);
        // 文件名不能为空
        if (TextUtils.isEmpty(path)) {
            return false;
        }
        // 文件路径不能为空
        if (path != null) {
            File file = new File(path);
            if (file.exists()) {
                return true;
            }
        }
        return false;
    }

    public static boolean deleteTrain(Context context) {
        String path = FaceFileUtil.getFileTrainParentPath(context);
        // 文件名不能为空
        if (TextUtils.isEmpty(path)) {
            return false;
        }
        // 文件路径不能为空
        if (path != null) {
            File file = new File(path);
            if (file.exists()) {
                deleteAllFiles(file);
            }
            return true;
        } else {
            return false;
        }
    }

    static void deleteAllFiles(File root) {
        File files[] = root.listFiles();
        if (files != null) {
            for (File f : files) {
                if (f.isDirectory()) { // 判断是否为文件夹
                    deleteAllFiles(f);
                    try {
                        f.delete();
                    } catch (Exception e) {
                    }
                } else {
                    if (f.exists()) { // 判断是否存在
                        deleteAllFiles(f);
                        try {
                            f.delete();
                        } catch (Exception e) {
                        }
                    }
                }
            }
        }
    }
}
